#include "tinyrpc/net/channel/wakeupchannel.h"
#include "tinyrpc/base/thread.h"
#include <iostream>
using namespace TinyRPC;
int main(){
    WakeupChannel wakeup;

    Thread thread1([&](){
        while (1)
        {
            wakeup.read();
            std::cout<<"wakeup"<<std::endl;
        }
        
    });
    thread1.start();

    wakeup.write();
    thread1.join();
}



// #include <sys/eventfd.h>
// #include <unistd.h>
// #include <stdlib.h>
// #include <stdio.h>
// #include <stdint.h>

// int main(int argc, char**argv[])
// {
//     int efd, j;
//     uint64_t u;
//     ssize_t s;

//     if (argc < 2)
//     {
//         printf("number of argc is wrong!\n");
//         return 0;
//     }

//     efd = eventfd(0,0);
//     if (-1 == efd)
//     {
//         printf("failed to create eventfd\n");
//     }

//     switch(fork())
//     {
//         case 0:
//         {
//             for(j=1; j<argc;j++)
//             {
//                 printf("child writing %s to efd\n", argv[j]);
//                 u = strtoull(argv[j], NULL, 0);
//                 s = write(efd, &u, sizeof(uint64_t));
//                 if (s!=sizeof(uint64_t))
//                 {
//                     printf("write efd failed\n");
//                 }
//             }
//             printf("Child completed write loop\n");
//             exit(0);
//         }
//         default:
//             sleep(2);
//             printf("Parents about to read\n");
//             s = read(efd, &u, sizeof(uint64_t));
//             if (s != sizeof(uint64_t))
//             {
//                 printf("read efd failed\n");
//             }
//             printf("Parents first read %llu (0x%llx) from efd\n", u, u);
//             exit(0);
//         case -1:
//         {
//             printf("fork error\n");
//         }
//     }

//     return 0;
// }

// // 运行结果
// // kane@kanelinux:/mnt/hgfs/kanelinuxshare/eventfd$ ./a.out 1 2 3 4
// // child writing 1 to efd
// // child writing 2 to efd
// // child writing 3 to efd
// // child writing 4 to efd
// // Child completed write loop
// // Parents about to read
// // Parents first read 10 (0xa) from efd

// // 如果有写入操作，但是并没有导致初始值变化，则主线程会一直挂在read操作上
// // kane@kanelinux:/mnt/hgfs/kanelinuxshare/eventfd$ ./a.out 0 0 0 0
// // child writing 0 to efd
// // child writing 0 to efd
// // child writing 0 to efd
// // child writing 0 to efd
// // Child completed write loop
// // Parents about to read
// // ^C